gtkprintoperation: job names must not exceed 255 chars
authorFelipe Borges <felipeborges@gnome.org>
Fri, 2 Oct 2015 15:15:26 +0000 (17:15 +0200)
committerFelipe Borges <felipeborges@gnome.org>
Fri, 9 Oct 2015 08:51:26 +0000 (10:51 +0200)
According to http://datatracker.ietf.org/doc/rfc2911/, The 'name'
attribute syntax is essentially the same as 'text', including the
REQUIRED support of UTF-8 except that the sequence of characters
is limited so that its encoded form MUST NOT exceed 255 (MAX) octets.

CUPS will not print jobs with names exceeding 255 characters.

https://bugzilla.gnome.org/show_bug.cgi?id=755988

gtk/gtkprintoperation.c

index 6dc7fb24037c1a5344815397fb2f0a61675e6ebd..9f4540b0f122275a5cce7d77193cb96b2ebd58df 100644 (file)
@@ -1606,6 +1606,7 @@ gtk_print_operation_set_job_name (GtkPrintOperation *op,
                                  const gchar       *job_name)
 {
   GtkPrintOperationPrivate *priv;
+  gchar *end;
 
   g_return_if_fail (GTK_IS_PRINT_OPERATION (op));
   g_return_if_fail (job_name != NULL);
@@ -1613,7 +1614,25 @@ gtk_print_operation_set_job_name (GtkPrintOperation *op,
   priv = op->priv;
 
   g_free (priv->job_name);
-  priv->job_name = g_strdup (job_name);
+  /*
+   * according to http://datatracker.ietf.org/doc/rfc2911/,
+   * job names MUST NOT exceed 255 (MAX) octets.
+   *
+   * CUPS will not print jobs with names exceeding 255 chars.
+   */
+  if (strlen (job_name) > 255)
+    {
+      end = g_utf8_find_prev_char (job_name, job_name + 255);
+      priv->job_name = g_utf8_substring (job_name,
+                                         0,
+                                         g_utf8_pointer_to_offset (job_name,
+                                                                   end));
+    }
+  else
+    {
+      priv->job_name = g_strdup (job_name);
+    }
+
 
   g_object_notify (G_OBJECT (op), "job-name");
 }